Banded Dotterel Moult Study

Exploration of dataset

Authors
Affiliations

Department of Ornithology, Max Planck Institute for Biological Intelligence, Seewiesen, Germany

Bashar Jarayseh

Department of Ornithology, Max Planck Institute for Biological Intelligence, Seewiesen, Germany

Ailsa Howard

South Bay Banded Dotterel Project, Kaikoura, New Zealand

Ted Howard

South Bay Banded Dotterel Project, Kaikoura, New Zealand

Tony Habraken

Port Waikato Banded Dotterel Project, Port Waikato, New Zealand

Emma Williams

Department of Conservation, Christchurch, New Zealand

Colin O`Donnell

Department of Conservation, Christchurch, New Zealand

Bart Kempenaers

Department of Ornithology, Max Planck Institute for Biological Intelligence, Seewiesen, Germany

Published

January 28, 2025

Main conclusions since last meeting in Nov, 2024

Breeding plumage

  • Sex difference in maximum rufous band score (strong effect) Go to Results

    • Males have a more full and immaculate rufous breast band than females
  • No age effect on maximum rufous band score Go to Results

  • Migratory-status difference in maximum rufous band score (weak, albiet significant effect) Go to Results

    • Residents of both sexes have slightly more full and immaculate rufous breast bands than migrants

Pre-basic moult

  • No sex-specific timing of the pre-basic moult Go to Results

  • No migratory-status-specific timing of the pre-basic moult Go to Results

  • Age-specific timing of pre-basic moult (strong effect) Go to Results

    • younger birds initiate their pre-basic moult earlier than older birds

Exploration of moult data extracted from photos

Note: data last modified 7-Nov-2024

This dataset contains the scored moult data for all usable photos from the 2021-2022, 2022-2023, and 2023-2024 breeding seasons at Kaikoura

check max and min dates for each season

# A tibble: 3 × 4
  season n_obs min_date   max_date  
   <dbl> <int> <date>     <date>    
1   2021   710 2021-08-02 2022-04-22
2   2022   614 2022-07-30 2023-04-14
3   2023   647 2023-07-01 2024-04-23

summarize the number of individuals in the dataset

[1] 94

assess how many individuals have more than a single season of data

[1] 63

summarise the number of usable photos for each individual across the three seasons

the final dataset

Code
dat %>% 
  datatable(class = 'cell-border stripe', rownames = FALSE, filter = 'top')

Plot the sampling distribution of Ailsa’s photos across the seasons

The “score” value is based on a scale from 1 to 7 describing the immaculate-ness and full-ness of the rufous breast band seen in the photos (Kok, Hogan, and Piersma (2020))

2021-2022 season data

2022-2023 season data

2023-2024 season data

Sources of individual variation in the maximum score of the rufous band

Sex-specific differences in breeding plumage

data wrangle for sex model - note that the max plumage score recorded during the core breeding months (Aug-Dec) is extracted for each individual for each year (“max_breeding_score”).

Code
# extract the core breeding months (i.e., when presumably all birds are at their maximum breeding plumage), and determine the maximum score for each individual.
ind_breeding_scores <-
  dat %>% 
  mutate(score = as.numeric(score)) %>% 
  mutate(breeding_season = ifelse(month(date) %in% c(8, 9, 10, 11, 12), 1, 0)) %>% 
  filter(breeding_season == 1) %>% 
  group_by(season, rings_comb, sex) %>% #filter(rings_comb == "RRBY") %>% select(score, date)
  summarise(max_breeding_score = max(score),
            date_of_max_score = date[which.max(score)],
            mode_breeding_score = get_mode(score)) %>% 
  ungroup() %>% 
  mutate(max_breeding_score_mean = round((max_breeding_score + mode_breeding_score)/2)) %>% 
  mutate(date_J_of_max_score = as.numeric(format(date_of_max_score + 181, "%j")))

Assess sample sizes of each sex

# A tibble: 2 × 2
  sex   `n_distinct(rings_comb)`
  <chr>                    <int>
1 F                           49
2 M                           35

mixed model with individual and season as random intercepts and sex as fixed effect

Code
# linear mixed model for the difference in max score between sexes
mod_max_score <- lmer(max_breeding_score ~ sex +
                        (1 | rings_comb) + (1 | season), 
                      data = ind_breeding_scores)

Males tend to have a more full and immaculate rufous bands than females, however there is substantial overlap in their distributions.

sex-specific breeding plumage distributions

effect-size table for sex-specific breeding plumage model

Banded Dotterel rufous band score Mean estimate 95% confidence interval
Fixed effects 𝛽 (standardized)
Male (Sex) 1.01 [0.73, 1.27]
Partitioned 𝑹²
Total Marginal 𝑹² 0.29 [0.17, 0.41]
Sex 0.29 [0.17, 0.41]
Total Conditional 𝑹² 0.51 [0.33, 0.66]
Random effects 𝜎²
Individual 0.17 [0.04, 0.31]
Year 0.03 [0, 0.13]
Residual 0.42 [0.31, 0.57]
Adjusted repeatability 𝑟
Individual 0.27 [0.07, 0.46]
Year 0.04 [0, 0.17]
Residual 0.69 [0.49, 0.9]
Sample sizes 𝑛
Years 3
Individuals 83
Observations 164

Sex-specific breeding plumage model predictions

Age-and sex-specific variation in breeding plumage

data wrangle for sex-age model. Standardize max_breeding_score according to sex to make males and females to make them comparable across ages (i.e., does max_breeding_score change across age while accounting for underlying sex differences?) Only applied to known-aged birds.

Code
# extract the core breeding months (i.e., when presumably all birds are at their maximum breeding plumage), and determine the maximum score for each individual.
ind_breeding_scores_age <- 
  dat %>% 
  mutate(score = as.numeric(score)) %>% 
  mutate(breeding_season = ifelse(month(date) %in% c(8, 9, 10, 11, 12), 1, 0)) %>% 
  filter(breeding_season == 1) %>% 
  group_by(season, rings_comb, sex, age) %>% 
  summarise(max_breeding_score = max(score)) %>% 
  ungroup() %>%
  group_by(sex) %>% 
  mutate(std_max_breeding_score = (max_breeding_score - mean(max_breeding_score, na.rm = TRUE)) / sd(max_breeding_score, na.rm = TRUE)) %>%
  filter(!is.na(age))

Assess sample sizes of each sex for individuals with known age

Code
ind_breeding_scores_age %>% 
  group_by(sex) %>% 
  summarise(n_distinct(rings_comb))
# A tibble: 2 × 2
  sex   `n_distinct(rings_comb)`
  <chr>                    <int>
1 F                           14
2 M                           10

mixed model of standardized max breeding score (by sex) with individual as random intercept and age as fixed effect (Note: we tried to include season as an additional random intercept, but the low sample size of repeated measures across seasons caused convergence issues of the model)

Code
# linear mixed model for the difference in max score between sexes across age
mod_max_score_age <- 
  lmer(std_max_breeding_score ~ age +
         (1 | rings_comb), 
       data = ind_breeding_scores_age)

effect-size table for sex- and age-specific variation in breeding plumage

no effect of age on the maximum extent of an individual’s rufous band score while controlling for underlying sex-specific variation

Banded Dotterel rufous band score Mean estimate 95% confidence interval
Fixed effects 𝛽 (standardized)
Age 0.09 [-0.24, 0.37]
Partitioned 𝑹²
Total Marginal 𝑹² 0.01 [0, 0.13]
Age 0.01 [0, 0.13]
Total Conditional 𝑹² 0.38 [0.01, 0.72]
Random effects 𝜎²
Individual 0.27 [0, 0.66]
Residual 0.45 [0.2, 0.75]
Adjusted repeatability 𝑟
Individual 0.37 [0, 0.72]
Residual 0.63 [0.28, 1]
Sample sizes 𝑛
Years 3
Individuals 24
Observations 42

age-specific breeding plumage model predictions

Migratory status-and sex-specific variation in breeding plumage

data wrangle for sex-migratory status model - only applied to birds with known migratory status based on winter resightings

Code
# extract the core breeding months (i.e., when presumably all birds are at their maximum breeding plumage), and determine the maximum score for each individual.
ind_breeding_scores_status <- 
  dat %>% 
  mutate(score = as.numeric(score)) %>% 
  mutate(breeding_season = ifelse(month(date) %in% c(8, 9, 10, 11, 12), 1, 0)) %>% 
  filter(breeding_season == 1) %>% 
  group_by(season, rings_comb, sex, age, migratory_status) %>% 
  summarise(max_breeding_score = max(score)) %>% 
  ungroup() %>%
  group_by(sex) %>% 
  mutate(std_max_breeding_score = (max_breeding_score - mean(max_breeding_score, na.rm = TRUE)) / sd(max_breeding_score, na.rm = TRUE)) %>% 
  filter(migratory_status %in% c("M", "R"))

Assess sample sizes of each sex and migratory status (for birds with known status)

Code
# Assess sample sizes of each sex and season 
# (13 females (2 migrant, 11 resident), 8 males (3 migrant, 5 resident))
ind_breeding_scores_status %>% 
  group_by(sex, migratory_status) %>% 
  summarise(n_distinct(rings_comb))
# A tibble: 4 × 3
# Groups:   sex [2]
  sex   migratory_status `n_distinct(rings_comb)`
  <chr> <chr>                               <int>
1 F     M                                       2
2 F     R                                      11
3 M     M                                       3
4 M     R                                       5

mixed model of standardized max breeding score (by sex) with individual as random intercept and migratory status as fixed effect (Note: we tried to include season as an additional random intercept, but the low sample size of repeated measures across seasons caused convergence issues of the model)

Code
# linear mixed model for the difference in max score between sexes
mod_max_score_status <- 
  lmer(std_max_breeding_score ~ migratory_status + 
         (1 | rings_comb), 
       data = ind_breeding_scores_status)

effect-size table and plot for sex- and migratory-status breeding plumage

no effect of migratory status on an individual’s rufous band score while controlling for underlying sex-specific variation

Banded Dotterel rufous band score Mean estimate 95% confidence interval
Fixed effects 𝛽 (standardized)
Resident (Migratory Status) 0.55 [0.04, 1.16]
Partitioned 𝑹²
Total Marginal 𝑹² 0.10 [0, 0.34]
Migratory Status 0.10 [0, 0.34]
Total Conditional 𝑹² 0.23 [0.01, 0.61]
Random effects 𝜎²
Individual 0.08 [0, 0.38]
Residual 0.51 [0.23, 0.76]
Adjusted repeatability 𝑟
Individual 0.16 [0, 0.54]
Residual 0.84 [0.46, 1]
Sample sizes 𝑛
Years 3
Individuals 21
Observations 42

migratory status-specific breeding plumage model predictions

Sources of individual variation in the timing of pre-basic moult

Within-individual moult dynamics across sexes

wrangle data by calculating the individual proportional moult scores by comparing each score to a given individual’s max (determined in previous chunk). Piece apart sex-specific variation in the timing of pre-basic moult

Assess sample sizes of each sex

# A tibble: 2 × 2
  sex   `n_distinct(rings_comb)`
  <chr>                    <int>
1 F                           49
2 M                           32

mixed effects binomial model assessing sex-differences in the timing of pre-basic moult while accounting for bird- and year-specific random variation in the timing of pre-basic moult (i.e., random slope model of date for individual and year).

Code
mod_moult_sex_bird_RIS <- 
  lme4::glmer(prop_molt_score_max ~ 
                date_J + sex + 
         (date_J | ring_season),
       data = ind_prop_molt_scores, 
       family = binomial)
Characteristic log(OR)1 95% CI1 p-value
(Intercept) 22 18, 26 <0.001
Date -0.10 -0.12, -0.08 <0.001
Sex


    F
    M -0.03 -0.80, 0.75 >0.9
1 OR = Odds Ratio, CI = Confidence Interval

Within-individual moult dynamics across migratory status

# A tibble: 2 × 2
  migratory_status `n_distinct(rings_comb)`
  <chr>                               <int>
1 M                                       5
2 R                                      16
Code
# mixed effects binomial model comparing migratory status and date effect on the changes in moult scores
mod_moult_status_bird_RIS <- 
  lme4::glmer(prop_molt_score_max ~ 
                date_J + migratory_status +
         (date_J|ring_season),
       data = ind_prop_molt_scores_status, 
       family = binomial)
Characteristic log(OR)1 95% CI1 p-value
(Intercept) 31 17, 44 <0.001
Date -0.14 -0.20, -0.08 <0.001
Migratory status


    M
    R -0.71 -2.7, 1.2 0.5
1 OR = Odds Ratio, CI = Confidence Interval

Within-individual moult dynamics across ages

# A tibble: 6 × 2
    age `n_distinct(rings_comb)`
  <dbl>                    <int>
1     1                        6
2     2                        4
3     3                       12
4     4                       11
5     5                        4
6     6                        2
Code
# mixed effects binomial model comparing migratory status and date effect on the changes in moult scores
mod_moult_age_bird_RIS <- 
  lme4::glmer(prop_molt_score_max ~ 
                date_J + age +
         (date_J | ring_season),
       data = ind_prop_molt_scores_age, 
       family = binomial)
Characteristic log(OR)1 95% CI1 p-value
(Intercept) 53 18, 88 0.003
Date -0.28 -0.47, -0.10 0.003
Age 2.2 0.61, 3.7 0.006
1 OR = Odds Ratio, CI = Confidence Interval

inspect the random slopes against the raw data from photos - potential issues with data coverage over the moulting period?

Breeding status analysis

Relationships between breeding schedule and plumage

effect of breeding plumage score on prolonged breeding

do individuals with a fuller breeding plumage (for their sex) breed later than the rest of the population? No effect

Code
mod_max_score_last_breeding_date <- 
  lme4::lmer(last_breeding_date_J_snum ~ 
                 std_max_breeding_score + 
         (1 | rings_comb) + (1 | season),
       data = ind_prop_molt_scores_last_breeding_date)

tbl_regression(mod_max_score_last_breeding_date, intercept = TRUE, 
               label = list(std_max_breeding_score ~ "max. breeding plumage score (sex-scaled)"))
Characteristic Beta 95% CI1
(Intercept) 10 5.8, 15
max. breeding plumage score (sex-scaled) -1.5 -5.9, 2.9
1 CI = Confidence Interval
Code
ggplot() +
  geom_line(data = as.data.frame(allEffects(mod_max_score_last_breeding_date))$std_max_breeding_score,
            aes(x = std_max_breeding_score, y = fit)) +
  geom_ribbon(data = as.data.frame(allEffects(mod_max_score_last_breeding_date))$std_max_breeding_score,
              aes(x = std_max_breeding_score, ymax = upper, ymin = lower),
              lwd = 1, alpha = 0.25) +
  geom_point(data = ind_prop_molt_scores_last_breeding_date,
              aes(x = std_max_breeding_score, y = last_breeding_date_J_snum),
              alpha = 1, shape = 20) +
  theme(text = element_text(family = "Verdana"),
        axis.ticks = element_blank(),
        plot.margin = unit(c(0.2,0.2,0.2,0.2), "cm"),
        panel.spacing = unit(1, "cm"),
        panel.background = element_rect(fill = 'transparent', color = NA),
        plot.background = element_rect(fill = 'transparent', color = NA), 
        panel.grid.major.y = element_line(size = 0.25, lineend = "round", colour = "grey90"),
        panel.grid.minor = element_blank(),
        panel.grid.major.x = element_line(size = 0.25, lineend = "round", colour = "grey90")) +
  ylab("year-scaled date of last breeding attempt") +
  xlab("sex-scaled max. breeding plumage score")

effect of breeding plumage score on early breeding

do individuals with a fuller breeding plumage (for their sex) breed earlier than the rest of the population? No effect

Code
mod_max_score_first_breeding_date <- 
  lme4::lmer(first_breeding_date_J_snum ~ 
                 std_max_breeding_score +
         (1 | rings_comb) + (1 | season),
       data = ind_prop_molt_scores_first_breeding_date)

tbl_regression(mod_max_score_first_breeding_date, intercept = TRUE, 
               label = list(std_max_breeding_score ~ "max. breeding plumage score (sex-scaled)"))
Characteristic Beta 95% CI1
(Intercept) 0.66 -4.7, 6.0
max. breeding plumage score (sex-scaled) -2.9 -7.8, 1.9
1 CI = Confidence Interval
Code
ggplot() +
  geom_line(data = as.data.frame(allEffects(mod_max_score_first_breeding_date))$std_max_breeding_score,
            aes(x = std_max_breeding_score, y = fit)) +
  geom_ribbon(data = as.data.frame(allEffects(mod_max_score_first_breeding_date))$std_max_breeding_score,
              aes(x = std_max_breeding_score, ymax = upper, ymin = lower),
              lwd = 1, alpha = 0.25) +
  geom_point(data = ind_prop_molt_scores_first_breeding_date,
              aes(x = std_max_breeding_score, y = first_breeding_date_J_snum),
              alpha = 1, shape = 20) +
  theme(text = element_text(family = "Verdana"),
        axis.ticks = element_blank(),
        plot.margin = unit(c(0.2,0.2,0.2,0.2), "cm"),
        panel.spacing = unit(1, "cm"),
        panel.background = element_rect(fill = 'transparent', color = NA),
        plot.background = element_rect(fill = 'transparent', color = NA), 
        panel.grid.major.y = element_line(size = 0.25, lineend = "round", colour = "grey90"),
        panel.grid.minor = element_blank(),
        panel.grid.major.x = element_line(size = 0.25, lineend = "round", colour = "grey90")) +
  ylab("year-scaled date of first breeding attempt") +
  xlab("sex-scaled max. breeding plumage score")

effect of prolonged breeding on breeding plumage score

do individuals with a late breeding attempts tend to have a fuller breeding plumage? No effect

Code
mod_last_breeding_date_max_score <- 
  lme4::lmer(std_max_breeding_score ~ 
                 last_breeding_date_J_snum +
         (1 | rings_comb) + (1 | season),
       data = ind_prop_molt_scores_last_breeding_date)

tbl_regression(mod_last_breeding_date_max_score, intercept = TRUE, 
               label = list(last_breeding_date_J_snum ~ "date last seen breeding (year-scaled)"))
Characteristic Beta 95% CI1
(Intercept) 0.00 -0.24, 0.25
date last seen breeding (year-scaled) 0.00 -0.01, 0.00
1 CI = Confidence Interval
Code
ggplot() +
  geom_line(data = as.data.frame(allEffects(mod_last_breeding_date_max_score))$last_breeding_date_J_snum,
            aes(x = last_breeding_date_J_snum, y = fit)) +
  geom_ribbon(data = as.data.frame(allEffects(mod_last_breeding_date_max_score))$last_breeding_date_J_snum,
              aes(x = last_breeding_date_J_snum, ymax = upper, ymin = lower),
              lwd = 1, alpha = 0.25) +
  geom_point(data = ind_prop_molt_scores_last_breeding_date,
              aes(x = last_breeding_date_J_snum, y = std_max_breeding_score),
              alpha = 1, shape = 20) +
  theme(text = element_text(family = "Verdana"),
        axis.ticks = element_blank(),
        plot.margin = unit(c(0.2,0.2,0.2,0.2), "cm"),
        panel.spacing = unit(1, "cm"),
        panel.background = element_rect(fill = 'transparent', color = NA),
        plot.background = element_rect(fill = 'transparent', color = NA), 
        panel.grid.major.y = element_line(size = 0.25, lineend = "round", colour = "grey90"),
        panel.grid.minor = element_blank(),
        panel.grid.major.x = element_line(size = 0.25, lineend = "round", colour = "grey90")) +
  xlab("year-scaled date of last breeding attempt") +
  ylab("sex-scaled max. breeding plumage score")

Relationships between breeding schedule and moult

effect of prolonged breeding on moult

do individuals with late breeding attempts have a delayed moult? No effect

Code
mod_last_breeding_date_prop_molt_mid <- 
  lmer(mid_point_date_J ~ last_breeding_date_J_snum + 
         (1 | rings_comb) + (1 | season),
       data = ind_prop_molt_scores_last_breeding_date)

tbl_regression(mod_last_breeding_date_prop_molt_mid, intercept = TRUE, 
               label = list(last_breeding_date_J_snum ~ "date last seen breeding (year-scaled)"))
Characteristic Beta 95% CI1
(Intercept) 168 157, 179
date last seen breeding (year-scaled) 0.14 -0.07, 0.36
1 CI = Confidence Interval
Code
ggplot() +
  geom_line(data = as.data.frame(allEffects(mod_last_breeding_date_prop_molt_mid))$last_breeding_date_J_snum,
            aes(x = last_breeding_date_J_snum, y = fit)) +
  geom_ribbon(data = as.data.frame(allEffects(mod_last_breeding_date_prop_molt_mid))$last_breeding_date_J_snum,
              aes(x = last_breeding_date_J_snum, ymax = upper, ymin = lower),
              lwd = 1, alpha = 0.25) +
  geom_point(data = ind_prop_molt_scores_last_breeding_date,
              aes(x = last_breeding_date_J_snum, y = mid_point_date_J),
              alpha = 1, shape = 20) +
  theme(text = element_text(family = "Verdana"),
        axis.ticks = element_blank(),
        plot.margin = unit(c(0.2,0.2,0.2,0.2), "cm"),
        panel.spacing = unit(1, "cm"),
        panel.background = element_rect(fill = 'transparent', color = NA),
        plot.background = element_rect(fill = 'transparent', color = NA), 
        panel.grid.major.y = element_line(size = 0.25, lineend = "round", colour = "grey90"),
        panel.grid.minor = element_blank(),
        panel.grid.major.x = element_line(size = 0.25, lineend = "round", colour = "grey90")) +
  xlab("year-scaled date of last breeding attempt") +
  ylab("mid-point date between\nlast max score photo and first photo during moult")

effect of prolonged breeding on prolonged retention of full plumage

do individuals with late breeding attempts retain their full breeding plumage longer? There is a positive relationship between the date when an individual was last seen with its maximum breeding plumage and the date when it was last observed breeding.

Code
mod_last_breeding_date_prop_molt_latest <- 
  lmer(latest_max_date_J ~ last_breeding_date_J_snum + 
        (1 | season),
       data = ind_prop_molt_scores_last_breeding_date)

tbl_regression(mod_last_breeding_date_prop_molt_latest, intercept = TRUE, 
               label = list(last_breeding_date_J_snum ~ "date last seen breeding (year-scaled)"))
Characteristic Beta 95% CI1
(Intercept) 156 141, 172
date last seen breeding (year-scaled) 0.37 0.17, 0.56
1 CI = Confidence Interval
Code
ggplot() +
  geom_line(data = as.data.frame(allEffects(mod_last_breeding_date_prop_molt_latest))$last_breeding_date_J_snum,
            aes(x = last_breeding_date_J_snum, y = fit)) +
  geom_ribbon(data = as.data.frame(allEffects(mod_last_breeding_date_prop_molt_latest))$last_breeding_date_J_snum,
              aes(x = last_breeding_date_J_snum, ymax = upper, ymin = lower),
              lwd = 1, alpha = 0.25) +
  geom_point(data = ind_prop_molt_scores_last_breeding_date,
              aes(x = last_breeding_date_J_snum, y = latest_max_date_J),
              alpha = 1, shape = 20) +
  theme(text = element_text(family = "Verdana"),
        axis.ticks = element_blank(),
        plot.margin = unit(c(0.2,0.2,0.2,0.2), "cm"),
        panel.spacing = unit(1, "cm"),
        panel.background = element_rect(fill = 'transparent', color = NA),
        plot.background = element_rect(fill = 'transparent', color = NA), 
        panel.grid.major.y = element_line(size = 0.25, lineend = "round", colour = "grey90"),
        panel.grid.minor = element_blank(),
        panel.grid.major.x = element_line(size = 0.25, lineend = "round", colour = "grey90")) +
  xlab("year-scaled date of last breeding attempt") +
  ylab("last date photographed with max score")

Relationships between age and breeding phenology

effect of age on prolonged breeding

do older individuals conclude their breeding season later? No

Code
mod_age_last_breeding_date <- 
  lme4::lmer(last_breeding_date_J_snum ~ age +
        (1 | rings_comb) + (1 | season),
       data = ind_prop_molt_scores_last_breeding_date)

tbl_regression(mod_age_last_breeding_date, intercept = TRUE, 
               label = list(age ~ "Age"))
Characteristic Beta 95% CI1
(Intercept) 13 -17, 43
Age -0.83 -9.0, 7.4
1 CI = Confidence Interval
Code
ggplot() +
  geom_line(data = as.data.frame(allEffects(mod_age_last_breeding_date))$age,
            aes(x = age, y = fit)) +
  geom_ribbon(data = as.data.frame(allEffects(mod_age_last_breeding_date))$age,
              aes(x = age, ymax = upper, ymin = lower),
              lwd = 1, alpha = 0.25) +
  geom_point(data = ind_prop_molt_scores_last_breeding_date,
              aes(x = age, y = last_breeding_date_J_snum),
              alpha = 1, shape = 20) +
  theme(text = element_text(family = "Verdana"),
        axis.ticks = element_blank(),
        plot.margin = unit(c(0.2,0.2,0.2,0.2), "cm"),
        panel.spacing = unit(1, "cm"),
        panel.background = element_rect(fill = 'transparent', color = NA),
        plot.background = element_rect(fill = 'transparent', color = NA), 
        panel.grid.major.y = element_line(size = 0.25, lineend = "round", colour = "grey90"),
        panel.grid.minor = element_blank(),
        panel.grid.major.x = element_line(size = 0.25, lineend = "round", colour = "grey90")) +
  xlab("age") +
  ylab("year-scaled date of last breeding attempt")

effect of age on early breeding

do older individuals start breeding earlier? No

Code
mod_age_first_breeding_date <- 
  lme4::lmer(first_breeding_date_J_snum ~ age +
         (1 | rings_comb) + (1 | season),
       data = ind_prop_molt_scores_first_breeding_date)

tbl_regression(mod_age_first_breeding_date, intercept = TRUE, 
               label = list(age ~ "Age"))
Characteristic Beta 95% CI1
(Intercept) -4.8 -35, 25
Age 2.3 -5.7, 10
1 CI = Confidence Interval
Code
ggplot() +
  geom_line(data = as.data.frame(allEffects(mod_age_first_breeding_date))$age,
            aes(x = age, y = fit)) +
  geom_ribbon(data = as.data.frame(allEffects(mod_age_first_breeding_date))$age,
              aes(x = age, ymax = upper, ymin = lower),
              lwd = 1, alpha = 0.25) +
  geom_point(data = ind_prop_molt_scores_first_breeding_date,
              aes(x = age, y = first_breeding_date_J_snum),
              alpha = 1, shape = 20) +
  theme(text = element_text(family = "Verdana"),
        axis.ticks = element_blank(),
        plot.margin = unit(c(0.2,0.2,0.2,0.2), "cm"),
        panel.spacing = unit(1, "cm"),
        panel.background = element_rect(fill = 'transparent', color = NA),
        plot.background = element_rect(fill = 'transparent', color = NA), 
        panel.grid.major.y = element_line(size = 0.25, lineend = "round", colour = "grey90"),
        panel.grid.minor = element_blank(),
        panel.grid.major.x = element_line(size = 0.25, lineend = "round", colour = "grey90")) +
  xlab("age") +
  ylab("year-scaled date of first breeding attempt")

Meeting notes:

13-Nov-24: Bart, Luke, and Bashar via zoom

  • add the breeding data to the analysis: for each individual include the date of last breeding (i.e., last date seen with nest or brood) as a predictor of molt timing. Also do an analysis relating the timing of last breeding to the age of the individual. Bashar will send Luke the breeding data he received from Ted.

  • drop pre-October data from the molt timing analysis.

  • next steps: Bashar to eventually write up this study as a report (which could eventually be used as his MSc thesis if he wants). Priority will be on him writing up a proposal for his thesis (which has a concrete deadline and is graded). Bashar will present the study at our weekly Monday meeting in the first few months of 2025.

Relevent papers to read and consider for manuscript

  • Gilbert (2022): Late breeding season definitive prebasic molt in males, and late breeding season brood care by females, in central California Wilson’s warblers

  • Drobniak and Gudowska (2020): Seasonality, diet, and physiology as a predominant control factors of the moult dynamics in birds – a meta-analysis Figure 4 from their pre-print is relevant for the age-specific timing we see:

  • Thompson and Slack (1983): Molt-breeding overlap and timing of pre-basic molt in Texas Least Terns

  • Barta et al. (2008): Optimal moult strategies in migratory birds

References

Barta, Zoltan, John M McNamara, Alasdair I Houston, Thomas P Weber, Anders Hedenström, and Orsolya Fero. 2008. “Optimal Moult Strategies in Migratory Birds.” Philosophical Transactions of the Royal Society B: Biological Sciences 363 (1490): 211–29.
Drobniak, Szymon Marian, and Agnieszka Gudowska. 2020. “Seasonality, Diet, and Physiology as a Predominant Control Factors of the Moult Dynamics in Birds–a Meta-Analysis.”
Gilbert, William M. 2022. “Late Breeding Season Definitive Prebasic Molt in Males, and Late Breeding Season Brood Care by Females, in Central California Wilson’s Warblers.” Ecology and Evolution 12 (3): e8689.
Kok, Eva MA, Jerry A Hogan, and Theunis Piersma. 2020. “Experimental Tests of a Seasonally Changing Visual Preference for Habitat in a Long-Distance Migratory Shorebird.” Ethology 126 (7): 681–93.
Thompson, Bruce C, and R Douglas Slack. 1983. “Molt-Breeding Overlap and Timing of Pre-Basic Molt in Texas Least Terns.” Journal of Field Ornithology 54 (2): 187–90.